/*
 ============================================================================
 Name        : scan_dir.c
 Author      : jinzhu
 Version     :
 Copyright   : Your copyright notice
 Description : Scan Dir in C, Ansi-style
 ============================================================================
 */
#include <fcntl.h>		// 提供open()函数
#include <sys/types.h>	// 提供mode_t类型
#include <sys/stat.h>	// 提供open()函数的符号
#include <unistd.h>		// 提供close()函数
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>

void scanDir(char* dir, int depth)
{
	DIR* dp; 					// 目录流指针__dirstream
	struct dirent* entry;	// 定义dirent指针保存后续目录
	struct stat statbuf;		// 保存文件属性

	if ((dp = opendir(dir)) == NULL) // 打开目录获得目录流指针
	{
		puts("Unable to open this dir.");
		return;
	}

	chdir(dir);		// 切换当前工作目录
	while (NULL != (entry = readdir(dp)))
	{
		lstat(entry->d_name, &statbuf); // 获得下一级成员
		if (S_IFDIR & statbuf.st_mode)	// 判断是否目录类型的文件
		{
			if (0 == strcmp(entry->d_name, ".") || 0 == strcmp(entry->d_name, "..")) // 如果是"."或".."跳过本次循环
			{
				continue;
			}
			printf("%*s%s\n", depth, "", entry->d_name);
			scanDir(entry->d_name, depth+4);
		}
		else
		{
			printf("%*s%s\n", depth, "", entry->d_name);
		}
	}
	chdir("..");
	closedir(dp);
}

int main(void) {

	puts("Scan boot DIR:");

	scanDir("/boot", 0);

	puts("Scan finished.");

	return 0;
}





